package com.epfresh.adapter;

import android.content.Context;
import android.graphics.Bitmap;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;

import com.bumptech.glide.Glide;
import com.bumptech.glide.Priority;
import com.bumptech.glide.load.engine.DiskCacheStrategy;
import com.bumptech.glide.load.resource.bitmap.CenterCrop;
import com.bumptech.glide.load.resource.bitmap.RoundedCorners;
import com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions;
import com.bumptech.glide.request.RequestOptions;
import com.epfresh.R;
import com.epfresh.api.helper.ApplicationHelper;
import com.epfresh.api.universalimageloader.core.DisplayImageOptions;
import com.epfresh.api.universalimageloader.core.ImageLoader;
import com.epfresh.api.universalimageloader.core.assist.ImageScaleType;
import com.epfresh.api.utils.LocalDisplay;
import com.epfresh.bean.NewHomeBean;
import com.epfresh.bean.TopBannerEntity;
import com.epfresh.constant.Constant;
import com.epfresh.fragment.HomeFragmentNew;
import com.epfresh.global.BaseFragment;
import com.epfresh.utils.banner.listener.OnBannerListener;
import com.epfresh.utils.banner.view.Banner;
import com.epfresh.utils.banner.view.BannerConfig;
import com.epfresh.utils.banner.view.Transformer;
import com.epfresh.utils.glide.GlideRoundTransformUtil;
import com.umeng.analytics.MobclickAgent;

import java.util.ArrayList;

import multitype.ItemViewBinder;

/**
 * Author: Chen
 * Date: 2019/1/18
 * Desc:
 */
public class BannerViewBinderNew extends ItemViewBinder<TopBannerEntity, BannerViewBinderNew.ViewHolder> {
    private Context context;
    private OnBannerClickListener onBannerClickListener;

    public BannerViewBinderNew(Context context) {
        this.context = context;
    }

    public void setOnBannerClickListener(OnBannerClickListener onBannerClickListener) {
        this.onBannerClickListener = onBannerClickListener;
    }

    @NonNull
    @Override
    protected ViewHolder onCreateViewHolder(@NonNull LayoutInflater inflater, @NonNull ViewGroup parent) {
        View itemView = inflater.inflate(R.layout.layout_top_banner, parent, false);
        return new ViewHolder(itemView);
    }

    @Override
    protected void onBindViewHolder(@NonNull final ViewHolder holder, @NonNull final TopBannerEntity item) {
        if (item.getBgBanner() != null) {
            ImageLoader.getInstance().displayImage(item.getBgBanner(), holder.bg_top_banner, options);
        }
        ArrayList<String> list_path = new ArrayList<>();
        for (NewHomeBean.BannersBean bannersBean : item.getImgBanners()) {
            list_path.add(bannersBean.getImg());
        }

//        list_path.add("http://ww4.sinaimg.cn/large/006uZZy8jw1faic21363tj30ci08ct96.jpg");
//        list_path.add("http://ww4.sinaimg.cn/large/006uZZy8jw1faic259ohaj30ci08c74r.jpg");
//        list_path.add("http://ww4.sinaimg.cn/large/006uZZy8jw1faic2b16zuj30ci08cwf4.jpg");
//        list_path.add("http://ww4.sinaimg.cn/large/006uZZy8jw1faic2e7vsaj30ci08cglz.jpg");

        //设置内置样式，共有六种可以点入方法内逐一体验使用。
        holder.top_banner.setBannerStyle(BannerConfig.NUM_INDICATOR);
        //设置图片网址或地址的集合
        holder.top_banner.setImages(list_path);
        //设置轮播的动画效果，内含多种特效，可点入方法内查找后内逐一体验
        holder.top_banner.setBannerAnimation(Transformer.Default);
        //设置轮播图的标题集合
//        banner.setBannerTitles(list_title);
        //设置轮播间隔时间
        holder.top_banner.setDelayTime(7000);
        //设置是否为自动轮播，默认是“是”。
        holder.top_banner.isAutoPlay(true);
        //设置图片加载器
        holder.top_banner.setImageLoader(new com.epfresh.utils.banner.loader.ImageLoader() {
            @Override
            public void displayImage(Context context, Object path, ImageView imageView) {
                displayRound(ApplicationHelper.getAppApplication(),imageView,(String) path);
//                ImageLoader.getInstance().displayImage((String) path, imageView);
            }
        });
        //设置指示器的位置，小点点，左中右。
        holder.top_banner.setIndicatorGravity(BannerConfig.CENTER)
                //以上内容都可写成链式布局，这是轮播图的监听。比较重要。方法在下面。
                .setOnBannerListener(new OnBannerListener() {
                    @Override
                    public void OnBannerClick(int position) {
                        MobclickAgent.onEvent(context,"Click_Home_Banner");
                        if (onBannerClickListener != null) {
                            onBannerClickListener.onBannerClick(item.getImgBanners().get(position));
                        }
                    }
                })
                //必须最后调用的方法，启动轮播图。
                .start();

    }

    private void displayRound(Context context, ImageView imageView, String url) {
        if (imageView == null) {
            throw new IllegalArgumentException("argument error");
        }
        Glide.with(context).load(url)
//                .apply(RequestOptions.errorOf(R.drawable.pic_load_error))
                .apply(RequestOptions.priorityOf(Priority.HIGH))
                .apply(RequestOptions.diskCacheStrategyOf(DiskCacheStrategy.AUTOMATIC))
//                .apply(RequestOptions.bitmapTransform(new GlideRoundTransformUtil(radius)))
                .apply(new RequestOptions().transforms(new CenterCrop(),new RoundedCorners(LocalDisplay.dp2px(10))))
                .transition(DrawableTransitionOptions.withCrossFade())
                .into(imageView);
    }

    class ViewHolder extends RecyclerView.ViewHolder{
        private ImageView bg_top_banner;
        private Banner top_banner;


        ViewHolder(View itemView) {
            super(itemView);

            bg_top_banner = itemView.findViewById(R.id.img_bg_banner);
            top_banner = itemView.findViewById(R.id.top_banner);
        }

    }


    private DisplayImageOptions options = new DisplayImageOptions.Builder()
            .showImageOnLoading(R.mipmap.home_rv_list_bg) //设置图片在下载期间显示的图片
            .showImageForEmptyUri(R.mipmap.home_rv_list_bg)//设置图片Uri为空或是错误的时候显示的图片
            .showImageOnFail(R.mipmap.home_rv_list_bg)
            .cacheInMemory(true)// 设置下载的图片是否缓存在内存中
            .cacheOnDisk(true)// 设置下载的图片是否缓存在SD卡中
            .considerExifParams(true) // 是否考虑JPEG图像EXIF参数（旋转，翻转）
            .imageScaleType(ImageScaleType.EXACTLY_STRETCHED)// 设置图片以如何的编码方式显示
            .bitmapConfig(Bitmap.Config.RGB_565)
            .build();


    public interface OnBannerClickListener {
        void onBannerClick(NewHomeBean.BannersBean bannersBean);
    }


}
